import request from "@/utils/request";
import { AxiosPromise } from "axios";
import { MenuQuery, MenuVO, MenuForm } from "./types";
import { Get, Post, Put } from "@/http/http";
import { ApiUrl } from "../api.url";
import { RouteRecordRaw } from "vue-router";

/**
 * 获取路由列表
 */
export async function getAllRoutesApi(): Promise<RouteRecordRaw[]> {
  return await Get<RouteRecordRaw[], any>(ApiUrl.ROUTE.V1, []);
}

// /**
//  * 获取路由列表
//  */
// export function listRoutes() {
//   return request({
//     url: "/api/v1/menus/routes",
//     method: "get",
//   });
// }

/**
 * 获取菜单树形列表
 *
 * @param queryParams
 */
export function listMenus(queryParams: MenuQuery): Promise<MenuVO[]> {
  return Get("/api/v1/menus", queryParams);
}
// export function listMenus(queryParams: MenuQuery): AxiosPromise<MenuVO[]> {
//   return request({
//     url: "/api/v1/menus",
//     method: "get",
//     params: queryParams,
//   });
// }

/**
 * 获取菜单下拉树形列表
 */
export function getMenuOptions(): Promise<OptionType[]> {
  return Get("/api/v1/menus/options");
}
// export function getMenuOptions(): AxiosPromise<OptionType[]> {
//   return request({
//     url: "/api/v1/menus/options",
//     method: "get",
//   });
// }

/**
 * 获取菜单表单数据
 *
 * @param id
 */
export function getMenuForm(id: number): Promise<MenuForm> {
  return Get("/api/v1/menus/" + id + "/form");
}
// export function getMenuForm(id: number): AxiosPromise<MenuForm> {
//   return request({
//     url: "/api/v1/menus/" + id + "/form",
//     method: "get",
//   });
// }

/**
 * 添加菜单
 *
 * @param data
 */
export function addMenu(data: MenuForm) {
  return Post("/api/v1/menus", data);
  // return request({
  //   url: "/api/v1/menus",
  //   method: "post",
  //   data: data,
  // });
}

/**
 * 修改菜单
 *
 * @param id
 * @param data
 */
export function updateMenu(id: string, data: MenuForm) {
  return Put("/api/v1/menus/" + id, data);
  // return request({
  //   url: "/api/v1/menus/" + id,
  //   method: "put",
  //   data: data,
  // });
}

/**
 * 删除菜单
 *
 * @param id 菜单ID
 */
export function deleteMenu(id: number) {
  return request({
    url: "/api/v1/menus/" + id,
    method: "delete",
  });
}
